#Requires AutoHotkey v2.0

class FileTool {
    
    ; 文本编码(CP0 默认的ANSI, UTF-8, UTF-8-RAW)
    enCoding := "UTF-8-RAW"

    ; 写(追加)文件的函数
    write(filePath, content) {

        ; 判断文件是否存在，不存在创建文件父文件夹
        if(!FileExist(filePath)){
            DirCreate(FileTool._gPBLS(filePath))
        }

        ; 使用 FileOpen 打开文件，如果文件不存在则创建
        file := FileOpen(filePath, "a", this.enCoding) ; "a" 表示以追加模式打开文件，如果文件不存在则创建
    
        ; 写入内容到文件
        file.Write(content)
        file.close()
        
        return true
    }

    read(filePath) {

        ; 判断文件是否存在，不存在创建文件父文件夹
        if(!FileExist(filePath)){
            DirCreate(FileTool._gPBLS(filePath))
        }
        
        ; 存储文件内容
        file := ""
    
        ; 尝试以读取文件,出现异常则尝试创建文件
        try{
            file := FileOpen(filePath, "r", this.enCoding)
        }catch {
            file := FileOpen(filePath, "w", this.enCoding)  ; 以写入模式打开文件（创建新文件）
            file.close()
            this.read(filePath)
        }
        
        fileContent := file.Read()  ; 读取文件内容
        file.Close()  ; 关闭文件
        return fileContent  ; 返回文件内容
    }
    
    ; 截取最后一个反斜杠之前的字符串(Get Path Before Last Slash )
    static _gPBLS(path) {

        ; 找到最后一个反斜杠的位置
        lastSlashPos := InStr(path, "\","On",,-1)
        
        ; 如果没有反斜杠,将路径转换为绝对路径(继续寻找反斜杠)
        if(lastSlashPos == 0){
            path := A_WorkingDir "\" path
            return this._gPBLS(path)
        }
        
        ; 截取路径中最后一个反斜杠之前的部分
        temp := SubStr(path, 1, lastSlashPos)
        
        ; 去掉 "\"
        return SubStr(temp, 1, -1)

    }
}

